// 《围棋》作者版权所有。保留所有权利。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

// 该文件实现了objsets。
// 
// objset类似于作用域，但objset元素
// 由其唯一id标识，而不是其
// 对象名称。

package types2

// 对象集是由其唯一id标识的一组对象。
// 对象集的零值是一个随时可用的空对象集。
type objset map[string]Object // 延迟初始化

// insert尝试将对象obj插入到objset s中。
// 如果s已包含具有
// 相同名称的替代对象alt，insert保持s不变并返回alt。
// 否则插入obj并返回零。
func (s *objset) insert(obj Object) Object {
	id := obj.Id()
	if alt := (*s)[id]; alt != nil {
		return alt
	}
	if *s == nil {
		*s = make(map[string]Object)
	}
	(*s)[id] = obj
	return nil
}
